home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Just Call Me Internet
/
Just Call Me Internet.iso
/
prog
/
atari
/
c
/
stut_src
/
rterrors.c
< prev
next >
Wrap
Text File
|
1996-05-27
|
12KB
|
517 lines
/*
* rterrors.c
*
* Purpose:
* --------
* Routines de gestion des 'run time errors"
* En particulier gestion d'un log ds une fenetre
*
* History:
* --------
* 26.09.94: fplanque: Created
*/
#include "!OPTIONS.H" /* Options de compilation */
#define THIS_FILE "RTERRORS.C v1.00 - 03.95"
/*
* System headers:
*/
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <errno.h>
/*
* Custom headers:
*/
#include "SPEC_PU.H"
#include "WIN_PU.H"
#include "TEXT_PU.H"
#include "RTERR_PU.H"
#include "FILES_PU.H"
/*
* ------------------------- MEMBRES PRIVES ----------------------------
*/
/*
* fenetre de log des erreurs:
*/
WIPARAMS * M_pWiParams_Errors = NULL;
/*
* ----------------------- OPERATIONS PRIVEES -------------------------
*/
/*
* ------------------------ IMPLEMENTATION -------------------------
*/
/*
* errors_CreateWinText(-)
*
* Purpose:
* --------
* Prparation du log d'erreurs pour son affichage ne fenetre
* ainsi que de ses paramtres d'affichage
*
* History:
* --------
* 25.05.94: fplanque: Created based on debug_CreateWinText()
*/
int errors_CreateWinText( /* Out: OK1 si ouverture OK */
TEXT_DRAWPAR * * ppTextDrawPar ) /* In: Ptr sur conteneur des params d'affichage nlle fenetre */
{
/*
* Cre texte vide
*/
TEXTINFO * pTextInfo_Errors = create_TextInfo();
/*
* Cre des paramtres d'affichages pour ce texte:
*/
*ppTextDrawPar = create_TextDrawPar( pTextInfo_Errors, 200 );
if ( *ppTextDrawPar == NULL )
{
return WRONG0;
}
return OK1;
}
/*
* errors_OpenLogWin(-)
*
* Purpose:
* --------
* Paramtrage d'une fentre texte en vue de son ouverture
*
* History:
* --------
* 26.09.94: fplanque: Created based on open_text()
*/
void errors_OpenLogWin(
WIPARAMS * pWiParams, /* In: fenetre concerne */
TEXT_DRAWPAR * pTextDrawPar ) /* In: Parals d'aff texte */
{
TEXTINFO * pTextInfo = pTextDrawPar -> pTextInfo;
/*
* Pointe sur infos texte:
*/
pWiParams -> content_ptr.textInfo= pTextInfo;
/*
* Pointe sur informations texte en RAM:
*/
pWiParams -> draw_ptr.pTextDrawPar = pTextDrawPar;
calc_textSizeW( pWiParams );
calc_textSizeH( pWiParams );
pWiParams -> h_step = (pTextDrawPar -> n_cell_w) *8; /* Saut par 8 car */
pWiParams -> v_step = pTextDrawPar -> n_cell_h; /* Saut par ligne */
/*
* Options menu:
*/
pWiParams -> menu_options.savedisk = TRUE_1; /* On peut sauver le contenu de la fentre */
pWiParams -> menu_options.affichage = PARAFF_TEXT; /* On peut rgler la taille du texte */
/*
* mmo adr Fenetres d'erreurs:
*/
M_pWiParams_Errors = pWiParams; /* Adr de la fentre de debug */
}
/*
* errors_CloseLogWin(-)
*
* Purpose:
* --------
* Fermeture du log d'erreurs ds fenetre
* Appell lors de la fermeture de la fenetre de type TYP_ERRORS
*
* History:
* --------
* 26.09.94: fplanque: Created
*/
void errors_CloseLogWin(
WIPARAMS * pWiParams_Closed )
{
/*
* On vient de fermer la fenetre:
* il n'y a donc plus de fenetre de log des erreurs:
*/
M_pWiParams_Errors = NULL;
/*
* Efface le log des erreurs en RAM:
* Libre le texte formatt:
*/
free_formatext( pWiParams_Closed -> draw_ptr.pTextDrawPar -> pTextInfo );
}
/*
* errorLog_AddLine(-)
*
* Purpose:
* --------
* Enregistrement d'un message d'erreur dans fenetre log
*
* History:
* --------
* 25.09.94: fplanque: Created
*/
void errorLog_AddLine(
const char * cpsz_ErrorMsg )
{
if( M_pWiParams_Errors == NULL )
{ /*
* Si fen d'erreurs pas encore ouverte, on va l'ouvrir:
*/
ouvre_fenetre( CLASS_TEXT, TYP_ERRORS,
NULL,NULL,NULL,
" Messages d'erreur " );
}
/* text_addLineToEnd( M_pTextInfo_Errors, cpsz_ErrorMsg ); */
add_textinf( M_pWiParams_Errors, cpsz_ErrorMsg );
}
/*
* -------------------- BOITES d'ALERTES ERREUR ------------------
*/
/*
* erreur(-)
*
* Purpose:
* --------
* Affiche boite d'alerte avec texte d'erreur
*
* History:
* --------
* 1992: fplanque: Created
*/
void erreur( const char *texte_erreur )
{
int choix;
choix=form_alert(1,texte_erreur);
if (choix == 1)
exit( 0 ); /* Termine prg */
}
/*
* erreur_rsrc(-)
*
* Purpose:
* --------
* Signale erreur dans fichier ressources
*
* History:
* --------
* 1992: fplanque: Created
*/
void erreur_rsrc( void )
{
erreur("[3][Erreur innatendue!|Le fichier RSC|a du tre endommag!][Quitter|Continuer]");
}
/*
* alert(-)
*
* Purpose:
* --------
* Affiche boite d'alerte avec message d'erreur correspondant un
* certain code d'erreur
*
* History:
* --------
* 1993: fplanque: Created
* 19.06.94: Plein de nouveaux codes d'erreur
* 19.06.94: Fonction renvoie maintenant le bouton press
*/
int alert( int type, ... )
{
static char *unknown = "[3][Erreur No: | |...][ OK ]";
int n_reponse = 1; /* Par dfaut */
switch( type )
{
case ENOENT: /* Errno 2 */
form_error( 2 ); /* File not found */
break;
case ENOTDIR: /* Errno 20 */
form_error( 3 ); /* Path not found */
break;
case DLG_QUIT:
n_reponse = form_alert( 1, "[2][|"
"Voulez-vous|"
"vraiment quitter?]"
"[Quitter|Annuler]");
break;
case DLG_SAVE_QUIT:
n_reponse = form_alert( 1,"[3][Certains fichiers chargs|"
"en mmoire on t modifis|"
"mais n'ont pas encore t|"
"sauvs sur disque. Voulez|"
"vous les sauver maintenant?]"
"[Sauver|Jeter|Annuler]");
break;
case DLG_SAVEBEFORECLOSE:
n_reponse = form_alert( 1,"[2][Ce document a t modifi!|"
"Voulez-vous sauver ces|"
"modifications avant de|"
"fermer le document?]"
"[Sauver|Jeter|Annuler]");
break;
case PERR_IMPOSSIBLE_OP:
form_alert( 1,"[1][|"
"Cette opration|"
"est impossible!]"
"[ Abandon ]");
break;
case PERR_NO_FILENAME:
n_reponse = form_alert( 1 , "[3][|"
"Vous n'avez pas donn|"
"de nom de fichier!]"
"[Ressayer|Abandonner]");
break;
case PERR_INCORRECT_PATH:
n_reponse = form_alert( 1,"[3][|"
"Le chemin d'accs spcifi|"
"est incorrect !]"
"[Ressayer|Abandonner]");
break;
case NOMEM_OPENDOC:
form_alert( 1,"[3][|"
"Il n'y a pas assez|"
"de mmoire libre pour|"
"ouvrir ce document!]"
"[ Abandon ]");
break;
case NOMEM_OPENFILE:
form_alert( 1,"[3][|"
"Il n'y a pas assez|"
"de mmoire libre pour|"
"charger ce fichier!]"
"[ Abandon ]");
break;
case NOMEM_SAVEDOC:
form_alert( 1,"[3][|"
"Il n'y a pas assez|"
"de mmoire libre pour|"
"sauver ce document!]"
"[ Abandon ]");
break;
case NOMEM_OPENWIN:
form_alert( 1,"[3][Dsol, il n'y a pas|"
"assez de mmoire interne|"
"disponible pour ouvrir|"
"une nouvelle fentre!]"
"[ Abandon ]");
break;
case NOMORE_WIN:
form_alert( 1,"[1][Dsol, il n'y a plus|"
"de fentre disponible|"
"sur le bureau. Fermez|"
"une fentre inutilise.]"
"[ Abandon ]");
break;
case NOMEM_NEWBUF:
form_alert( 1,"[1][Dsol, il n'y a pas assez|"
"de mmoire interne pour|"
"allouer un buffer de la|"
"taille demande. La taille|"
"prcdente est conserve.]"
"[Poursuivre]");
break;
case QUERY_FILEFORMAT:
n_reponse = form_alert( 1,"[2][Le fichier auquel vous essayez|"
"d'accder ne peut tre exploit|"
"automatiquement. Dsirez-vous|"
"spcifier explicitement le|"
"format de donnes utilis?]"
"[Spcifier|Abandon]");
break;
case QUERY_VDTFORMAT:
n_reponse = form_alert( 1,"[2][S'agit-il d'un fichier|"
"de pages vidotex cr|"
"par STUT ONE version|"
"2.3, 2.4, 2.5 ou 2.6?]"
"[Oui|Non]");
break;
case BAD_FILEFMT:
form_alert( 1,"[1][Le format du fichier auquel|"
"vous essayez d'accder n'est|"
"PAS RECONNU par la prsente|"
"version du logiciel! Donc:|"
"Impossible de l'exploiter...]"
"[ Abandon ]");
break;
case BAD_HEADFMT:
form_alert( 1,"[1][Le header du fichier auquel vous|"
"essayez d'accder pourrait tre|"
"ALTERE ou bien ICOMPATIBLE avec|"
"la prsente version du logiciel!|"
"Donc: Impossible exploiter...]"
"[ Abandon ]");
break;
case BAD_FILEOWN:
form_alert( 1,"[1][Le fichier auquel vous|"
"essayez d'accder n'est pas|"
"au FORMAT Stut One.|"
"Il a t cr par une autre|"
"application non-compatible.]"
"[ Abandon ]");
break;
case BAD_CONTENT:
{
static char *texte = "[1][Opration impossible:|"
"Le fichier auquel|"
"vous essayez d'accder|"
"n'est pas un fichier|"
"de .............. ! ]"
"[ Abandon ]";
/* Argument supplmentaire: */
int ftype; /* Type de fichier */
/* Argument variable: */
va_list adpar;
/* Initialise ce pointeur: */
va_start ( adpar, type ); /* Denier arg fixe = type */
/* Recupre argument supplmentaire: */
ftype = va_arg( adpar, int );
/* Fixe type de donnes dans le texte: */
switch ( ftype )
{
case FS_ARBO:
memcpy ( texte + 88, "d'arborescence ! ", 20 );
break;
case FS_PAGES_ECRAN:
memcpy ( texte + 88, "de pages cran ! ", 20 );
break;
case FS_INF:
memcpy ( texte + 88, "de paramtres ! ", 20 );
break;
case FS_INI:
memcpy ( texte + 88, "de configuration ! ", 20 );
break;
case FS_DATAS:
memcpy ( texte + 88, "de bases de donnes!", 20 );
break;
case FS_TEXTES:
memcpy ( texte + 88, "de textes! ", 20 );
break;
case FS_DXF:
memcpy ( texte + 88, "de donnes DXF ! ", 20 );
break;
default:
ping();
}
/* Affiche alerte */
form_alert( 1, texte );
break;
}
case UNEXPECTED_FFMT:
form_alert( 1,"[1][Le fichier auquel vous essayez|"
"d'accder est endommag et son|"
"contenu ne peut tre exploit!|"
"(Causes possibles: Fausse manip,|"
"disque dfectueux, virus...)]"
"[ Abandon ]");
break;
case BAD_VERSION:
form_alert( 1,"[1][Le format du fichier|"
"auquel vous essayez|"
"d'accder ne peut tre|"
"exploit par cette|"
"version de STUT ONE.]"
"[ Abandon ]");
break;
case DISK_CANTCREATEDIR:
/* Ne peux pas crer le dossier */
form_alert( 1,"[3][Impossible de crer|"
"le dossier!]"
"[ Abandon ]");
break;
case DISK_CANTENTERDIR:
form_alert( 1,"[3][Impossible d'ouvrir|"
"le dossier!]"
"[ Abandon ]");
break;
default:
printf("Erreur: %d \n",type); /* PROVISOIRE */
form_alert( 1, unknown );
}
return n_reponse;
}